package base

import (
    "github.com/jefferyjob/go-easy-utils/v3/anyx"
    "gorm.io/gorm"
    "time"
)

type BaseModel struct {
    ID    int64      `gorm:"column:id;primaryKey;autoIncrement:true;comment:主键" json:"id"` // 主键
    Ctime *time.Time `gorm:"column:ctime;comment:创建时间" json:"ctime"`                     // 创建时间
    Utime *time.Time `gorm:"column:utime;comment:修改时间" json:"utime"`                     // 修改时间
    Cby   string     `gorm:"column:cby;comment:创建人" json:"cby"`                           // 创建人
    Uby   string     `gorm:"column:uby;comment:修改人" json:"uby"`                           // 修改人
}
type Page struct {
    PageSize  int `json:"pageSize" binding:"required,gt=10,lt=20"`
    PageIndex int `json:"pageIndex" binding:"required,gt=0,lt=200"`
}

func Offset(page *Page) int {
    toInt, _ := anyx.ToInt((page.PageIndex - 1) * page.PageSize)
    return toInt
}
func Limit(page *Page) int {
    toInt, _ := anyx.ToInt(page.PageSize)
    return toInt
}
func Paginate(page *Page) func(db *gorm.DB) *gorm.DB {
    return func(db *gorm.DB) *gorm.DB {

        pageSize := page.PageSize
        switch {
        case pageSize > 100:
            pageSize = 100
        case pageSize <= 0:
            pageSize = 10
        }
        offset := (page.PageIndex - 1) * pageSize
        return db.Offset(offset).Limit(pageSize)
    }
}
